from PublicReference.base import *

class 极诣驭剑士主动技能(主动技能):
    def 等效CD(self, 武器类型):
        if 武器类型 == '巨剑':
            return round(self.CD / self.恢复 * 1.1, 1)
        if 武器类型 == '太刀':
            return round(self.CD / self.恢复 * 0.95, 1)
        if 武器类型 == '钝器':
            return round(self.CD / self.恢复 * 1.05, 1)
        if 武器类型 == '短剑':
            return round(self.CD / self.恢复 * 1.0, 1)

class 极诣驭剑士技能0(被动技能):
    名称 = '基础精通'
    所在等级 = 1
    等级上限 = 200
    基础等级 = 100
    关联技能 = ['帝国剑术']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.472 + 0.0889 * self.等级, 5)


class 极诣驭剑士技能1(极诣驭剑士主动技能):
    名称 = '帝国剑术'
    所在等级 = 15
    等级上限 = 1
    基础等级 = 1
    基础 = 180+206+128
    成长 = 0
    CD = 1.0
    TP成长 = 0.10
    TP上限 = 5

class 极诣驭剑士技能2(被动技能):
    名称 = '毁灭之巨剑精通'
    所在等级 = 15
    等级上限 = 40
    基础等级 = 30
    关联技能2 = ['所有']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1 + (15.6 + 0.6 * self.等级)/100, 5)
            
    def 加成倍率2(self, 武器类型):
        return self.物理攻击力倍率(武器类型)

    def 物理攻击力倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        if self.等级 <= 30:
            return round(1.01 + 0.01 * self.等级, 5)
        else:
            return round(0.71 + 0.02 * self.等级, 5)


class 极诣驭剑士技能3(极诣驭剑士主动技能):
    名称 = '魔剑降临'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    #火冰
    基础 = 75.51
    成长 = 8.49
    攻击次数 = 1
    #光
    基础2 = 21.57
    成长2 = 2.43
    攻击次数2 = 0
    #暗
    基础3 = 49.37
    成长3 = 5.63
    攻击次数3 = 0

    CD = 1.0
    TP成长 = 0.1
    TP上限 = 7

class 极诣驭剑士技能4(极诣驭剑士主动技能):
    名称 = '疾影斩'
    所在等级 = 20
    等级上限 = 60
    基础等级 = 48
    基础 = 3417.6
    成长 = 266.79
    CD = 7.0
    TP成长 = 0.10
    TP上限 = 7

class 极诣驭剑士技能5(极诣驭剑士主动技能):
    名称 = '幻剑术'
    所在等级 = 25
    等级上限 = 60
    基础等级 = 41
    基础 = 3417.6
    成长 = 386.4
    CD = 8.0
    TP成长 = 0.10
    TP上限 = 7

class 极诣驭剑士技能6(极诣驭剑士主动技能):
    名称 = '升龙剑'
    所在等级 = 25
    等级上限 = 60
    基础等级 = 41
    基础 = 3663.78
    成长 = 414.23
    CD = 8.0
    TP成长 = 0.10
    TP上限 = 7

class 极诣驭剑士技能7(被动技能):
    名称 = '魔剑觉醒'
    所在等级 = 30
    等级上限 = 15
    基础等级 = 5
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.035 + 0.015 * self.等级, 5)

class 极诣驭剑士技能8(极诣驭剑士主动技能):
    名称 = '穿云破空剑'
    所在等级 = 30
    等级上限 = 60
    基础等级 = 26
    基础 = 4572.72
    成长 = 868.28
    CD = 12.0
    TP成长 = 0.10
    TP上限 = 7

class 极诣驭剑士技能9(极诣驭剑士主动技能):
    名称 = '魔剑奥义'
    所在等级 = 30
    等级上限 = 60
    基础等级 = 38
    #光冰
    基础 = 736.87
    成长 = 83.13
    攻击次数 = 1
    #暗火
    基础2 = 669.41
    成长2 = 75.59
    攻击次数2 = 0
    CD = 5

class 极诣驭剑士技能10(极诣驭剑士主动技能):
    名称 = '破军旋舞斩'
    所在等级 = 35
    等级上限 = 60
    基础等级 = 24
    基础 = 5555.22
    成长 = 1053.78
    CD = 15.0
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1
    def 装备护石(self):
        self.基础 *= 1.24
        self.成长 *= 1.24


class 极诣驭剑士技能11(极诣驭剑士主动技能):
    名称 = '瞬影三绝斩'
    所在等级 = 35
    等级上限 = 60
    基础等级 = 36
    基础 = 5922.08
    成长 = 668.93
    CD = 15.0
    TP成长 = 0.10
    TP上限 = 7

class 极诣驭剑士技能12(极诣驭剑士主动技能):
    名称 = '雷鸣千军破'
    所在等级 = 40
    等级上限 = 60
    基础等级 = 1
    CD = 20.0
    基础 = 367.47
    成长 = 41.54
    攻击次数 = 3
    基础2 = 367.47
    成长2 = 41.54
    攻击次数2 = 8
    基础3 = 464.32
    成长3 = 41.68
    攻击次数3 = 8
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.基础 *= 1.07
        self.成长 *= 1.07
        self.基础2 *= 1.07
        self.成长2 *= 1.07
        self.攻击次数2 = 12

class 极诣驭剑士技能13(极诣驭剑士主动技能):
    名称 = '恶即斩'
    所在等级 = 45
    等级上限 = 60
    基础等级 = 31
    基础 = 797.90
    成长 = 90.10
    攻击次数 = 13
    基础2 = 6562.93
    成长2 = 741.07
    攻击次数2 = 1
    CD = 40.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.基础 *= 1.19
        self.成长 *= 1.19
        self.攻击次数 = 14
        self.基础2 *= 1.17
        self.成长2 *= 1.17
        self.CD *= 0.95

class 极诣驭剑士技能14(极诣驭剑士主动技能):
    名称 = '极·驭剑术（时空斩）'
    所在等级 = 50
    等级上限 = 40
    基础等级 = 12
    基础 = 37307
    成长 = 11264
    CD = 145.0

class 极诣驭剑士技能15(被动技能):
    名称 = '斩魂术'
    所在等级 = 48
    等级上限 = 40
    基础等级 = 20
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(0.995 + 0.02 * self.等级, 5)

class 极诣驭剑士技能16(极诣驭剑士主动技能):
    名称 = '裂刃天冲'
    所在等级 = 60
    等级上限 = 40
    基础等级 = 23
    基础 = 5876.73
    成长 = 664.27
    基础2 = 7188.27
    成长2 = 811.73
    攻击次数2 = 1
    CD = 30.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.基础 *= 0
        self.成长 *= 0
        self.基础2 *= 2.12
        self.成长2 *= 2.12
        self.CD *= 0.95

class 极诣驭剑士技能17(极诣驭剑士主动技能):
    名称 = '幻剑阵'
    所在等级 = 70
    等级上限 = 40
    基础等级 = 18
    基础 = 12447.69
    成长 = 1405.65
    基础2 = 12448.41
    成长2 = 1405.59
    攻击次数2 = 1
    CD = 50.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.攻击次数 = 0
        self.攻击次数2 *= 0.50 * 4 * 1.18
   

class 极诣驭剑士技能18(极诣驭剑士主动技能):
    名称 = '破剑阵'
    所在等级 = 80
    等级上限 = 40
    基础等级 = 13
    #瞬爆
    基础 = 35064.00
    成长 = 3960.00
    #不瞬爆
    基础2 = 42740.67
    成长2 = 4823.33
    CD = 45.0


class 极诣驭剑士技能19(被动技能):
    名称 = '帝皇盟约'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 11

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.28 + 0.02 * self.等级, 5)

    def 物理攻击力倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.28 + 0.02 * self.等级, 5)

class 极诣驭剑士技能20(极诣驭剑士主动技能):
    名称 = '飓风魔剑'
    所在等级 = 80
    等级上限 = 40
    基础等级 = 16
    基础 = 364.73
    成长 = 41.27
    攻击次数 = 40
    基础2 = 6415.47
    成长2 = 724.53
    攻击次数2 = 1
    
    #魔剑奥义额外增伤
    攻击次数3 = 1
    CD = 25.0

class 极诣驭剑士技能21(极诣驭剑士主动技能):
    名称 = '誓约之剑：雷沃汀'
    所在等级 = 85
    等级上限 = 40
    基础等级 = 5
    基础 = 74269.25
    成长 = 22420.75
    CD = 180.0

class 极诣驭剑士技能22(被动技能):
    名称 = '剑心：魔剑觉醒'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 4
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)

class 极诣驭剑士技能23(极诣驭剑士主动技能):
    名称 = '极诣·驭剑术：聚魔剑'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 6
    基础 = 76384.80
    成长 = 8624.20
    CD = 60

class 极诣驭剑士技能24(极诣驭剑士主动技能):
    名称 = '誓约之引：万剑之巅'
    所在等级 = 100
    等级上限 = 40
    基础等级 = 2
    基础 = 241312.00
    成长 = 72855.50
    CD = 290.0

    关联技能 = ['无']

    def 加成倍率(self, 武器类型):
        return 0.0



极诣驭剑士技能列表 = []
i = 0
while i >= 0:
    try:
        exec('极诣驭剑士技能列表.append(极诣驭剑士技能'+str(i)+'())')
        i += 1
    except:
        i = -1

极诣驭剑士技能序号 = dict()
for i in range(len(极诣驭剑士技能列表)):
    极诣驭剑士技能序号[极诣驭剑士技能列表[i].名称] = i

极诣驭剑士一觉序号 = 0
极诣驭剑士二觉序号 = 0
极诣驭剑士三觉序号 = 0
for i in 极诣驭剑士技能列表:
    if i.所在等级 == 50:
        极诣驭剑士一觉序号 = 极诣驭剑士技能序号[i.名称]
    if i.所在等级 == 85:
        极诣驭剑士二觉序号 = 极诣驭剑士技能序号[i.名称]
    if i.所在等级 == 100:
        极诣驭剑士三觉序号 = 极诣驭剑士技能序号[i.名称]

极诣驭剑士护石选项 = ['无']
for i in 极诣驭剑士技能列表:
    if i.是否有伤害 == 1 and i.是否有护石 == 1:
        极诣驭剑士护石选项.append(i.名称)

极诣驭剑士符文选项 = ['无']
for i in 极诣驭剑士技能列表:
    if i.所在等级 >= 20 and i.所在等级 <= 80 and i.所在等级 != 50 and i.是否有伤害 == 1:
        极诣驭剑士符文选项.append(i.名称)

class 极诣驭剑士角色属性(角色属性):

    职业名称 = '极诣驭剑士'

    武器选项 = ['巨剑']
    
    #'物理百分比','魔法百分比','物理固伤','魔法固伤'
    伤害类型选择 = ['物理百分比']
    
    #默认
    伤害类型 = '物理百分比'
    防具类型 = '轻甲'
    防具精通属性 = ['力量']

    主BUFF = 1.71
   
    #基础属性(含唤醒)
    基础力量 = 920.0
    基础智力 = 830.0
    
    #适用系统奶加成
    力量 = 基础力量
    智力 = 基础智力

    #人物基础 + 唤醒
    物理攻击力 = 65.0
    魔法攻击力 = 65.0
    独立攻击力 = 1045.0
    火属性强化 = 13
    冰属性强化 = 13
    光属性强化 = 13
    暗属性强化 = 13

    破剑阵开关 = 0
    钻头蓄力开关 = 0
    魔剑降临 = 0
    魔剑堆叠层数 = 0
    冰刀三绝斩倍率 = 1

    def __init__(self):
        self.技能栏= copy.deepcopy(极诣驭剑士技能列表)
        self.技能序号= copy.deepcopy(极诣驭剑士技能序号)


    def 被动倍率计算(self):
        super().被动倍率计算()
        self.技能栏[self.技能序号['破军旋舞斩']].被动倍率 *= round(1.096 + self.技能栏[self.技能序号['毁灭之巨剑精通']].等级 * 0.004,2) * 1.2
        
        self.技能栏[self.技能序号['恶即斩']].基础2 *= round(1.375 + self.技能栏[self.技能序号['毁灭之巨剑精通']].等级 * 0.005,2)
        self.技能栏[self.技能序号['恶即斩']].成长2 *= round(1.375 + self.技能栏[self.技能序号['毁灭之巨剑精通']].等级 * 0.005,2)

        if self.魔剑降临 == 0 or self.魔剑降临 == 1:
            self.技能栏[self.技能序号['魔剑降临']].攻击次数 = 1
            self.技能栏[self.技能序号['魔剑降临']].攻击次数2 = 0
            self.技能栏[self.技能序号['魔剑降临']].攻击次数3 = 0
        if self.魔剑降临 == 2:
            self.技能栏[self.技能序号['魔剑降临']].攻击次数 = 0
            self.技能栏[self.技能序号['魔剑降临']].攻击次数2 = 1
            self.技能栏[self.技能序号['魔剑降临']].攻击次数3 = 0
        if self.魔剑降临 == 3:
            self.技能栏[self.技能序号['魔剑降临']].攻击次数 = 0
            self.技能栏[self.技能序号['魔剑降临']].攻击次数2 = 0
            self.技能栏[self.技能序号['魔剑降临']].攻击次数3 = 1

        if self.魔剑降临 == 0 or self.魔剑降临 == 3:
            self.技能栏[self.技能序号['魔剑奥义']].攻击次数 = 0
            self.技能栏[self.技能序号['魔剑奥义']].攻击次数2 = 1
        if self.魔剑降临 == 1 or self.魔剑降临 == 2:
            self.技能栏[self.技能序号['魔剑奥义']].攻击次数 = 1
            self.技能栏[self.技能序号['魔剑奥义']].攻击次数2 = 0

        if self.钻头蓄力开关 == 1:
            self.技能栏[self.技能序号['飓风魔剑']].攻击次数 = 40
        else:
            self.技能栏[self.技能序号['飓风魔剑']].攻击次数 = 30

        if self.破剑阵开关 == 1:
            self.技能栏[self.技能序号['破剑阵']].攻击次数 = 1
            self.技能栏[self.技能序号['破剑阵']].攻击次数2 = 0
        else:
            self.技能栏[self.技能序号['破剑阵']].攻击次数 = 0
            self.技能栏[self.技能序号['破剑阵']].攻击次数2 = 1

        self.技能栏[self.技能序号['飓风魔剑']].基础 *= 1 + 0.03 * self.魔剑堆层数
        self.技能栏[self.技能序号['飓风魔剑']].成长 *= 1 + 0.03 * self.魔剑堆层数
        self.技能栏[self.技能序号['飓风魔剑']].基础3 = self.魔剑堆层数 * self.技能栏[self.技能序号['魔剑奥义']].等效百分比(self.武器类型)
        if self.魔剑降临 == 3:
            self.技能栏[self.技能序号['飓风魔剑']].基础3 += self.技能栏[self.技能序号['魔剑奥义']].等效百分比(self.武器类型) * 10 * (0.09 + self.技能栏[self.技能序号['飓风魔剑']].等级/100)

        if self.魔剑降临 == 1:
            self.技能栏[self.技能序号['瞬影三绝斩']].被动倍率 *= self.冰刀三绝斩倍率

            
class 极诣驭剑士(角色窗口):
    def 窗口属性输入(self):
        self.初始属性 = 极诣驭剑士角色属性()
        self.角色属性A = 极诣驭剑士角色属性()
        self.角色属性B = 极诣驭剑士角色属性()
        self.一觉序号 = 极诣驭剑士一觉序号
        self.二觉序号 = 极诣驭剑士二觉序号
        self.三觉序号 = 极诣驭剑士三觉序号
        self.护石选项 = copy.deepcopy(极诣驭剑士护石选项)
        self.符文选项 = copy.deepcopy(极诣驭剑士符文选项)

    def 界面(self):
        super().界面()

        self.魔剑降临选择=MyQComboBox(self.main_frame2)
        self.魔剑降临选择.addItem('魔剑降临：火')
        self.魔剑降临选择.addItem('魔剑降临：冰')
        self.魔剑降临选择.addItem('魔剑降临：光')
        self.魔剑降临选择.addItem('魔剑降临：暗')
        self.魔剑降临选择.setCurrentIndex(1)
        self.魔剑降临选择.resize(120,20)
        self.魔剑降临选择.move(315,380)

        self.魔剑堆层数选择=MyQComboBox(self.main_frame2)
        self.魔剑堆层数选择.addItem('魔剑堆：0层')
        self.魔剑堆层数选择.addItem('魔剑堆：1层')
        self.魔剑堆层数选择.addItem('魔剑堆：2层')
        self.魔剑堆层数选择.addItem('魔剑堆：3层')
        self.魔剑堆层数选择.addItem('魔剑堆：4层')
        self.魔剑堆层数选择.addItem('魔剑堆：5层')
        self.魔剑堆层数选择.setCurrentIndex(1)
        self.魔剑堆层数选择.resize(120,20)
        self.魔剑堆层数选择.move(315,410)

        self.破剑阵开关=QCheckBox('破剑阵瞬爆',self.main_frame2)
        self.破剑阵开关.resize(100,20)
        self.破剑阵开关.move(325,440)
        self.破剑阵开关.setStyleSheet(复选框样式)
        self.破剑阵开关.setChecked(True)

        self.钻头蓄力开关=QCheckBox('飓风魔剑蓄力',self.main_frame2)
        self.钻头蓄力开关.resize(100,20)
        self.钻头蓄力开关.move(325,470)
        self.钻头蓄力开关.setStyleSheet(复选框样式)
        self.钻头蓄力开关.setChecked(True)

        self.冰刀三绝斩倍率=MyQComboBox(self.main_frame2)
        for i in range(0,30):
            self.冰刀三绝斩倍率.addItem('冰三绝斩：'+str(i)+'%')
        self.冰刀三绝斩倍率.setCurrentIndex(13)
        self.冰刀三绝斩倍率.resize(120,20)
        self.冰刀三绝斩倍率.move(315,510)
        self.冰刀三绝斩倍率.setToolTip('请根据自己实测选择')

    def 输入属性(self, 属性):
        super().输入属性(属性)
        if self.破剑阵开关.isChecked():
            属性.破剑阵开关 = 1

        if self.钻头蓄力开关.isChecked():
            属性.钻头蓄力开关 = 1

        属性.魔剑堆层数 = self.魔剑堆层数选择.currentIndex()
        属性.魔剑降临 = self.魔剑降临选择.currentIndex()
        属性.冰刀三绝斩倍率 = self.冰刀三绝斩倍率.currentIndex() / 100 + 1